%% main.tex --- файл-обертка для диплома

\documentclass[russian,utf8,simple,floatsection,equationsection]{eskdtext} 

\include{defs}  % вставляем содержимое служебных инструкций из defs.tex
\ESKDcolumnII{\small{Разработка ПО <<\name>>}}

\setcounter{section}{2}

\begin{document}
\section{Разработка <<\name>>.}
\subsection{Процесс и методология разработки ПО}
Разработка программного обеспечения (англ. software engineering,
software development) — это род деятельности (профессия) и процесс,
направленный на создание и поддержание работоспособности программного
обеспечения, используя технологии и практики из информатики,
управления проектами, математики, инженерии и других областей
знания. Как и другие, традиционные инженерные дисциплины, разработка
программного обеспечения имеет дело с проблемами стоимости и
надёжности. Некоторые программы содержат миллионы строк исходного
кода, которые, как ожидается, должны правильно исполняться в
изменяющихся условиях. Сложность ПО сравнима со сложностью наиболее
сложных из современных машин. (Боинг 777-200 насчитывает примерно
132,5 тыс. уникальных деталей. Если учесть каждую заклёпку и каждый
винт, можно говорить о более чем 3 млн. деталей \red{[3]}.) 

На протяжении нескольких десятилетий стоит задача поиска повторяемого,
предсказуемого процесса или методологии, которая бы улучшила
продуктивность и качество разработки. Одни пытались систематизировать
и формализовать этот, по-видимому, непредсказуемый процесс. Другие
применяли к нему методы управления проектами. Без четкого управления,
разработка ПО выходит из-под контроля, съедая лишнее время и
средства.

Процесс разработки программного обеспечения (англ. software
development process, software process) — структура, согласно которой
построена разработка программного обеспечения (ПО).

Модель водопада (англ. waterfall model) - модель процесса разработки
программного обеспечения, в которой процесс разработки выглядит как
поток, последовательно проходящий фазы анализа требований,
проектирования, реализации, тестирования, интеграции и поддержки. В
качестве источника названия <<водопад>> часто указывают статью,
опубликованною У.У.Ройсом (W. W. Royce) в 1970 году; забавно, что сам
Ройс использовал итеративную модель разработки и даже не использовал
термин <<водопад>>\red{[2]}. 

\subsection{Описание используемых методов.}
\subsubsection{Генетические алгоритмы}
Идея использования теории эволюции в программировании была предложена
еще в работах Фогеля [Фогель1968] и
Рехенберга[Rechenberg1965]. Аппарат генетических алгоритмов был
впервые введен в работе Холланда [Holland1975].
Множество решений, как и в генетических алгоритмах, представляет собой популяцию:

\begin{equation}
  P={p_i}:i= {\overline{1,N}},
\end{equation}
где $N$ - размер популяции (возможно, динамически изменяемая); $p_i$- хромосома, которая, в свою очередь, является парой:

\begin{equation}
  <F,G>:G=(I,W), W \in I \times I,
\end{equation}
где $F$  - значение меры приспособленности (фитнесса); $G$- решение,
описываемое хромосомой. Решение может быть описано следующим
образом: на множестве $I=F \cup T$, где $F$ – множество функций, $T$-
множество термов, определяется иерархическая структура путем задания
графа $G=(I,W), W \subset I \times I$.

В классическом генетическом алгоритме [Holland1975] можно выделить следующие этапы:
\begin{itemize}
\item инициализация исходной популяции;
\item оценка приспособленности хромосом в популяции;
\item проверка условия остановки алгоритма;
\item отбор хромосом;
\item применение генетических операторов рекомбинации;
\item формирование новой популяции;
\item выбор лучшей хромосомы в популяции.
\end{itemize}

На этапе отбора хромосом из искомой популяции удаляются хромосомы, пригодность которых меньше заданной.

На этапе выбора пар для скрещивания, формируется множество $M$:

\begin{equation}
  M=   <x_i,x_j> : x_i \in X,\quad x_j \in X,\quad i=  \overline{1,K},
\end{equation}
где $K$– необходимое количество пар для скрещивания; $X$– популяция; $x_i,x_j$- первый и второй родитель.

Рекомбинация – процесс, в результате которого возникают новые комбинации генов. В процессе рекомбинации можно выделить следующие этапы:
\begin{itemize}
\item скрещивание (также называемое кроссинговером или кроссовером),
  которое позволяет создать N новых хромосом-потомков путем
  комбинирования генетического материала родителей;
\item мутация, которая с той или иной вероятностью изменяет значение
  гена в выбранном локусе хромосомы.
\end{itemize}

Оператор скрещивания – предназначен для получения новых решений, на
основе тех, что находятся в данный момент в популяции. Получает на
вход две или более хромосом, на выходе выдает комбинированное решение,
которое построено на основе входных решений.

Оператор мутации – предназначен для вывода популяции из локального
оптимума. Он применяется с некоторой вероятностью к каждому решению
полученному в результате операции скрещивания.

\subsubsection{Нечеткий аппроксиматор с эволюционной настройкой}
В 1992 г. Коско (Kosco) доказал теорему, согласно которой, любая
функциональная зависимость может быть аппроксимирована адаптивной
нечеткой моделью. Для этого необходимы следующие условия:
\begin{itemize}
\item На этапе ак\-ку\-му\-ли\-ро\-ва\-ния ак\-ти\-ви\-зи\-ро\-ван\-ных консеквентов
  используется операция взвешенной суммы;
\item Дефаззификация выполняется по методу центра тяжести;
\item Функции антецедентов полностью перекрывают пространство входных переменных;
\item Используются линейные функции консеквентов.
\end{itemize}

Необходимое число правил модели для заданной точности аппроксимации,
которое определяется с помощью минимального расстояния между
центроидами двух смежных нечетких множеств, представляющих консенквенты
правил, обозначаемых $y_i$ и $y_{i+1}$:
\begin{equation}
  |y_i-y_{i+1}|< \frac{\varepsilon}{{2g-1}}
\end{equation}
где $\varepsilon$- точность аппроксимации; $g$- максимальное число
перекрытий антецедентов по $X$(для одномерного входа $m=2$).

Если входная переменная одномерная, то количество правил определяется
как:
\begin{equation}
  n \geq \frac{X}{\varepsilon}
\end{equation}

При создании нечеткой продукционной модели системы могут быть
использованы как априорные данные о моделируемой системе, поступающие
от экспертов, так и данные, полученные в результате измерений.

Допустим, необходимо создать базу нечетких правил с MISO-структурой: с
двумя входными ($x_1,x_2$) и одной выходной (y) переменными. При этом
задана обучающая выборка, состоящая из множества примеров следующего
вида:

\begin{equation}
  (x_1^k,x_2^k,y^k),k=1,\ldots,K
\end{equation}
где $x_1^k,x_2^k,y^k$ - соответственно значения входных переменных
$x_1,x_2$  и выходной переменной $y$ в $k$-м примере; $K$ – общее
число примеров в обучающей выборке.
\begin{description}
\item[Этап 1.] Разбиение пространств входных и выходных
  переменных. Пусть известны минимальные и максимальные значения
  каждой переменной:
  \begin{equation}
    x_1 \in [x_1^{(min)},\ x_1^{(max)}],\ x_2 \in [x_2^{(min)},x_2^{(max)}],\ y \in [y^{(min)},y^{(max)}]
  \end{equation}

  Разобьем области определений этих переменных на отрезки. Причем
  число этих отрезков, а также их длина для каждой переменной
  подбираются индивидуально экспертом.
  
\item[Этап 2.] Формирование начальной базы правил. Можно предложить
  два непротиворечивых подхода к формированию начальной базы правил.
  
  Первый подход основан на генерации множества правил исходя из
  возможных сочетаний нечетких высказываний в предпосылках и
  заключениях правил, в соответствии с которым максимальное количество
  правил в базе определяется следующим соотношением:
  
  \begin{equation}
    l=l_1,l_2, \dots, l_m, l_y
  \end{equation}
  где $l_1,\quad l_2, \dots, l_m,\quad l_y$ - число функций принадлежности для
  заданных переменных $X_1, X_2, \dots, X_m$ -- для выходной переменной
  $y$, $m$- количество входных переменных $y$- выходная переменная.

  Другой подход к формированию начальной базы правил основан на том,
  что изначально каждому примеру из выборки ставится в соответствие
  отдельное правило. Для этого для каждого примера
  $(x_1^k,x_2^k,y^k),k=1,\ldots,K$,определяются степени принадлежности
  заданных переменных к соответствующим нечетким множествам. После чего
  каждому примеру ставятся в соответствие те нечеткие множества, степени
  принадлежности к которым у соответствующих значений переменных из
  этого примера являются максимальными.
\item[Этап 3.] Определение рейтингов правил. Поскольку изначально
  сформированная база правил наверняка является избыточной, а также
  может содержать противоречащие друг другу правила- с одинаковыми
  предпосылками и разными заключениями, то набор правил необходимо
  оптимизировать. Одним из простых подходов [1] к сокращению правил
  является следующий: 
  \begin{itemize}
  \item Допустим набор экспериментальных данных в полной мере
    характеризует особенности моделируемой системы.
  \item Все примеры из обучающей выборки
    $(x_1^k,x_2^k,y^k),\ k=1,\ldots,K$  «предъявляются» каждому
    правилу. В результате для каждого правила определяется рейтинг:
    \begin{equation}
      r_i= \sum_{k=1}^{(K)} \mu_{A_i1}(x_1^{(k)}) \dots
      \mu_{A_i2}(x_1^{(k)}) \dots \mu_{A_im}(x_m^{(k)}) \dots
      \mu_{B_i}(y^{(k)}),\quad i=1,\dots,n
    \end{equation}
  \end{itemize}
\item[Этап 4.] Сокращение числа правил. После подсчета рейтингов
  правил из базы правил исключаются правила с наименьшим значением
  $r$. При этом в первую очередь сокращения проводятся по группам
  правил, имеющим одинаковые предпосылки и разные заключения,
  т.е. разные функции принадлежности переменной вывода.
\end{description}

Особенностью же нечетких экспертных систем является представление знаний экспертов в
нечеткой форме с использованием лингвистических переменных. Таким
образом, построение нечетких ЭС заключается в задании базы нечетких
правил, определении функций принадлежности и выборе алгоритма
нечеткого логического вывода.

К преимуществам нечетких ЭС прогнозирования можно отнести:
\begin{itemize}
\item отсутствие требования наличия обучающей выборки экспериментальных данных;
\item адекватность построенной модели знаниям эксперта;
\item возможность оптимизации построенной системы непосредственно экспертом, без участия разработчика;
\item высокая вычислительная эффективность.
\end{itemize}
Недостатками нечетких ЭС прогнозирования можно назвать:
\begin{itemize}
\item необходимость наличия эксперта;
\item высокие требования к адекватности знаний эксперта.
\end{itemize}
Требование к адекватности знаний эксперта экспериментальным данным
нередко оказывается практически невыполнимым. Потому экспериментальные
данные используются для оптимизации параметров функций принадлежности
нечетких правил нечеткой ЭС с целью получить наиболее адекватную ЭС.

Основными задачами НПГС можно назвать: 
\begin{itemize}
\item настройка системы нечеткого вывода;
\item оптимизация параметров правил базы нечетких правил.
\end{itemize}

В первом типе задач можно выделить так называемые Питсбурский и
Мичиганский подходы обучения базы нечетких правил. В первом случае за
хромосому принимается вся база правил целиком; во втором - одно
правило. \cite{Herera}.

Оптимизация параметров нечетких правил может заключаться либо в
настройке параметров функций принадлежности, либо в настройке
коэффициентов растяжения/сжатия функций принадлежности. [Cordon2001]

\subsection{Структурные и функциональные модели}
\subsubsection{Анализ информационных потоков для разработки ПО}


Функциональная модель представляет собой набор диаграмм потоков данных
(далее - ДПД), которые описывают смысл операций и ограничений. ДПД
отражает функциональные зависимости значений, вычисляемых в системе,
включая входные значения, выходные значения и внутренние хранилища
данных. ДПД - это граф, на котором показано движение значений данных
от их источников через преобразующие их процессы к их потребителям в
других объектах.

ДПД содержит процессы, которые преобразуют данные, потоки данных,
которые переносят данные, активные объекты, которые производят и
потребляют данные, и хранилища данных, которые пассивно хранят данные.

Процесс преобразует значения данных. Процессы самого нижнего уровня
представляют собой функции без побочных эффектов (примерами таких
функций являются вычисление суммы двух чисел, вычисление комиссионного
сбора за выполнение проводки с помощью банковской карточки и
т.п.). Весь граф потока данных тоже представляет собой процесс
(высокого уровня). Процесс может иметь побочные эффекты, если он
содержит нефункциональные компоненты, такие как хранилища данных или
внешние объекты.

Поток данных соединяет выход объекта (или процесса) со входом другого
объекта (или процесса). Он представляет промежуточные данные
вычислений. Поток данных изображается в виде стрелки между
производителем и потребителем данных, помеченной именами
соответствующих данных; примеры стрелок, изображающих потоки
данных.

Активным называется объект, который обеспечивает движение данных,
поставляя или потребляя их. Активные объекты обычно бывают
присоединены к входам и выходам ДПД. На ДПД активные объекты
обозначаются прямоугольниками.

Хранилище данных - это пассивный объект в составе ДПД, в котором
данные сохраняются для последующего доступа. Хранилище данных
допускает доступ к хранимым в нем данным в порядке, отличном от того,
в котором они были туда помещены. Агрегатные хранилища данных, как
например, списки и таблицы, обеспечивают доступ к данным в порядке их
поступления, либо по ключам


ДПД показывает все пути вычисления значений, но не показывает в каком
порядке значения вычисляются. Решения о порядке вычислений связаны с
управлением программой, которое отражается в динамической модели. Эти
решения, вырабатываемые специальными функциями, или предикатами,
определяют, будет ли выполнен тот или иной процесс, но при этом не
передают процессу никаких данных, так что их включение в
функциональную модель необязательно. Тем не менее иногда бывает
полезно включать указанные предикаты в функциональную модель, чтобы в
ней были отражены условия выполнения соответствующего процесса. 

Рассмотрим подробнее этап проектирования программы. Для этого опишем
общую структуру системы, представленную на рисунке~\ref{dataFlow1}.

На данной диаграмме присутствуют следующие потоки:
\begin{itemize}
\item Сравнительные диаграммы;
\item Данные прошлых прогнозов;
\item Параметры ГА;
\item Параметры нечеткой системы;
\end{itemize}

\begin{figure}[!ht]
  \centering
  \includegraphics[angle=0, width=\textwidth]{dataFlow1}
  \caption{Общая структура системы.}
  \label{dataFlow1}
\end{figure}

Диаграмма потоков для системы отрисовки графиков представленная на
рисунке~\ref{dataFlow2}.

На данной диаграмме присутствуют следующие потоки:
\begin{itemize}
\item Качество прогнозирования - график, на котором изображены два
  графика: реальные результаты эксперимента; данные, полученные после
  аппроксимации;
\item Гистограммы - график, на котором показаны отклонения в
  аппроксимации по каждому из экспериментов.
\end{itemize}

\begin{figure}[!ht]
  \centering
  \includegraphics[angle=0, width=\textwidth]{dataFlow2}
  \caption{Подсистема отрисовки графиков.}
  \label{dataFlow2}
\end{figure}

Система работы с генетическими алгоритмами представленная на
рисунке~\ref{dataFlow3}.

На данной диаграмме присутствуют следующие потоки:

\begin{itemize}
\item P - размер популяции;
\item M - вероятность мутации.
\end{itemize}

\begin{figure}[!hb]
  \centering
  \includegraphics[angle=0, width=\textwidth]{dataFlow3}
  \caption{Подсистема работы с ГА.}
  \label{dataFlow3}
\end{figure}

Система для хранение данных эксперимент представленная на
рисунке~\ref{dataFlow4}.

На данной диаграмме присутствуют следующие потоки:
\begin{itemize}
\item Входные данные эксперимента;
\item Выходные данные - данные полученные после эксперимента.
\end{itemize}

\begin{figure}[!h]
  \centering
  \includegraphics[angle=0, width=\textwidth]{dataFlow4}
  \caption{Подсистема работы с данными эксперимента.}
  \label{dataFlow4}
\end{figure}

Система работы с нечеткими правилами представленная на
рисунке~\ref{dataFlow5}.

На данной диаграмме присутствуют следующие потоки:
\begin{itemize}
\item Функции принадлежности. Представленные как кусочно-линейные
  функции;
\item Структура правил. Общая структура.
\end{itemize}

\begin{figure}[!h]
  \centering
  \includegraphics[angle=0, width=\textwidth]{dataFlow5}
  \caption{Подсистема работы с нечеткими правилами.}
  \label{dataFlow5}
\end{figure}

\subsubsection{Структура программного комплекса}

Общая схема разрабатываемого программного обеспечения представленная на
рисунке~\ref{system_struct}.

\begin{figure}[!ht]
  \centering
  \includegraphics[angle=0, width=\textwidth]{system_struct}
  \caption{Общая структура системы.}
  \label{system_struct}
\end{figure}

Рассмотрим каждую из подсистем подробнее:

\begin{description}
\item[Пользователь] - В данном случае это не под система. Так на
  диаграмме представленная схема работы с пользователем программы.
\item[Интерфейс программы]  - Данная подсистема отвечает за отрисовку
  интерфейса пользователя, графиков, настройки параметров, а так же предварительного
  просмотра отчетов.
\item[Составитель отчетов] - Данная подсистема будет генерировать
  отчеты в формате html и pdf.
\item[Алгоритмы]  - отвечает за совместную работу подчиненных
  подсистем. А также за передачу информации об имеющихся алгоритмах в
  вышестоящие подсистемы, благодаря чему данное ПО становится более расширяемым.
  \begin{description}
  \item[ГА] - отвечает за работу генетических алгоритмов.
  \item[Нечеткость] - Работа с нечеткой базой правил.
  \end{description}
\item[DB] - работы с базой данных
  \begin{description}
  \item[Данные эксперимента] - отвечает за хранение и работу с
    данными, полученными в результате предыдущих прогнозов.
  \item[Параметры отчетов] - хранит отчеты, отданные пользователю
  \item[Результат прогнозирования] - хранит модель, построенную для прогнозирования.
  \end{description}
\end{description}
\end{document}
